#!/usr/bin/ruby -Ku
# -*- coding: utf-8-emacs -*-
require 'test/unit'
require 'm3g'

class Test_World < Test::Unit::TestCase
  def setup
  end

  def teadown
  end

  def test_default_variables
    wld = M3G::World.new
    assert_equal nil, wld.active_camera
    assert_equal nil, wld.background
  end

  def test_set_variables
    bg  = M3G::Background.new
    cam = M3G::Camera.new
    wld = M3G::World.new

    wld.child << cam
    wld.active_camera = cam
    wld.background    = bg

    assert_equal cam, wld.active_camera
    assert_equal bg , wld.background
  end

  def test_duplicate
    bg  = M3G::Background.new
    cam = M3G::Camera.new
    wld1 = M3G::World.new

    wld1.child << cam
    wld1.active_camera = cam
    wld1.background    = bg

    wld2 = wld1.duplicate

    # 注意: Cameraはシーンノードなので再帰的に複製され、
    # 元のCameraとは別インスタンスになる。
    # Backgroundはシーンノードではないのでポインター渡しで、
    # 元のBackgroundと同じインスタンスを指す。
    # 、と思っていたが複製してるな。これ正しい動作か?
    assert_not_equal wld1, wld2
    assert_not_equal wld1.active_camera, wld2.active_camera
    assert_not_equal wld1.background   , wld2.background
  end

  def test_references
    bg  = M3G::Background.new
    cam = M3G::Camera.new
    wld = M3G::World.new

    wld.child << cam
    wld.active_camera = cam
    wld.background    = bg

    objs = wld.references

    assert_equal 3, objs.length
    assert_equal cam, objs[0]   # 子ノードとして
    assert_equal bg , objs[1]
    assert_equal cam, objs[2]   # アクティブカメラとして
  end
end
